#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define high 24
#define width 28
#define en_num 5  //敌机数目 
	int print[high][width]={0};
	int fly_x,fly_y; //飞机坐标
	int bullet_x,bullet_y;  //子弹坐标 
	int en_x[en_num],en_y[en_num];  //敌机坐标 
	int score;  //得分 
	int bulletwidth;  //子弹宽度 
	int kongzhi;   //控制敌机速度 
	
void gotoxy(int x,int y)
	{
		HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
		COORD pos;
		pos.X=x;
		pos.Y=y;
		SetConsoleCursorPosition(handle,pos);
	}
	
void startup()
{
	int k;
	fly_x=high-1;
	fly_y=width/2;
	print[fly_x][fly_y]=2;
	for(k=0;k<en_num;k++)
	{
		en_x[k]=rand()%3;
		en_y[k]=rand()%width;
		print[en_x[k]][en_y[k]]=1;	
	}
	score=0;
	bulletwidth=0; 
	kongzhi=50; 

}

 
void show()
{

	gotoxy(0,0);  //清屏
	int i,j;
	for(i=0;i<=high;i++)
	{
		for(j=0;j<=width;j++)
		{
			if(i==0||i==high)
			{
				printf("-");
			} 
			else if(j==0||j==width)
			{
				printf("|");
			} 
			else if(print[i][j]==0)
			{
				printf(" ");  //输出空格
			}
			else if(print[i][j]==1)
			{
				printf("*");   //输出敌机
			}
			else if(print[i][j]==2)
			{
				printf("^");  //输出飞机
			}
			else if(print[i][j]==3)
			{
				printf("!");  //输出子弹 
			}

		}
		printf("\n");
	}
	printf("score:%d",score);

}

 
void upwhitoutInput()
{
	int i,j,k;
	static int speed=kongzhi;  //控制速度 
	if(score>3)
	{
		bulletwidth=1;
		kongzhi=30;
	} 
	if(score>10)
	{
		bulletwidth=2;
		kongzhi=15;
	}                   //得分控制宽度 
	for(k=0;k<en_num;k++)
	{
		if(en_x[k]>high)
		{
			print[en_x[k]][en_y[k]]=0;
			en_x[k]=1;
			en_y[k]=rand()%width;
			print[en_x[k]][en_y[k]]=1;
			score--;   //敌机逃跑 
		}
		if(speed<kongzhi)
		{
			speed++;
		}
		if(speed==kongzhi)
		{
			for(k=0;k<en_num;k++)
			{
				print[en_x[k]][en_y[k]]=0;
				en_x[k]++;
				print[en_x[k]][en_y[k]]=1;
				speed=0;
			}
			
		}	
	}
	
		
		
	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if(print[i][j]==3)
			{
				for(k=0;k<en_num;k++)
				{
					if(i==en_x[k]&&j==en_y[k])
					{
						print[en_x[k]][en_y[k]]=0;
						en_x[k]=1;
						en_y[k]=rand()%width;
						print[en_x[k]][en_y[k]]=1;
						score++;
					}
				}
				print[i][j]=0;
				print[i-1][j]=3;
			} 
		}    //子弹上升 
	}
	
	
}

void upwhitInput()
{
	char input;

	if(kbhit())  //按键开始
	{

		input=getch();
		if(input=='a')
		{
			print[fly_x][fly_y]=0;
			fly_y--;
			if(fly_y<=0)
			{
				fly_y++;
			}
			print[fly_x][fly_y]=2;
		}
		if(input=='d')
		{
			print[fly_x][fly_y]=0;
			fly_y++;
			if(fly_y>=width)
			{
				fly_y--;
			}  
			print[fly_x][fly_y]=2;
		}
		if(input=='w')
		{
			print[fly_x][fly_y]=0;
			fly_x--;
			if(fly_x<=0)
			{
				fly_x++;
			}
			print[fly_x][fly_y]=2;
		}
		if(input=='s')
		{
			print[fly_x][fly_y]=0;
			fly_x++;
			if(fly_x>=high)
			{
				fly_x--;
			}
			print[fly_x][fly_y]=2;
		}
		if(input==' ')
		{
			int left,right;
			bullet_x=fly_x-1;
			bullet_y=fly_y;
			left=fly_y-bulletwidth;
			right=fly_y+bulletwidth;
			if(left<1)
			left=1;
			if(right>width-1)
			right=width-1;
			int i;
			for(i=left;i<=right;i++)
			print[bullet_x][i]=3;
		} 

	}

}
 
int main()
{
	startup();  //数据初始化
	while(1)
	{
		show();  //显示
		upwhitoutInput();  //更新无输入
		upwhitInput();  //更新有输入
	}

	return 0;
}